package jm.nj.demo03mian.demo08;
/*
* 多态的用处
* 1.作为方法的参数使用,可以传递任意的子类对象
* 2.作为方法的返回值类型使用,可以返回任意的子类对象
*
* 多态的弊端:
*  无法使用子类特有的属性和方法
*
* */
public class Demo {
    public static void main(String[] args) {
        show(new Cat());
        show(new Dog());
        System.out.println("-----------");
        /*
        *   Animal a --->return  new Cat();             Animal a= new Cat();
        *   Animal a --->return  new Dog();             Animal a= new Dog();
        * */
        Animal a =  getAminal();
        a.sleep();
        a.eat();




    }
    /*
    * 定义一个方法,方法的返回值类型是Animal
    * Animal是一个抽象类,无法创建对象
    * 所有方法类可以创建任意的子类对象返回
    * */
    private static Animal getAminal() {
        //return new Cat();
        return new Dog();
    }
/*
* 定义一个方法,方法的参数是Animal
* Animal是一个抽象类,无法创建对象
* 所有可以创建任意的子类对象传递--->多态
* Animal a = new Cat();
* Animal a = new Dog();
*
* */
    private static void show(Animal a) {
        a.eat();
        a.sleep();
    }


}
